package sort;
/**
 * 写出出常用的几种排序算法的实现
 * 参考文档：https://www.cnblogs.com/onepixel/articles/7674659.html（好文，老黑推荐）
 * -----
 * 总结：
 * 1. 归并、快排、堆排序都是使用了分治法的思想，三者进行比较，
 *      1. 如果首要考虑空间复杂度，那肯定是选择堆排序，因为堆排序是O(1)
 *      2. 如果首要考虑稳定性，那肯定是选择归并排序，因为其他两种排序都不稳定
 *      3. 如果从平均情况下的排序速度考虑，一般都会选择快排
 * -----
 * 2. 基于比较的排序：冒泡，快排，归并排序，选择排序，堆排序，插入排序，希尔排序
 * 3. 非比较的排序：计数排序，桶排序，基数排序
 * -----
 * 4. 稳定的排序：冒泡，归并，插入排序，计数排序，桶排序，基数排序
 * 5. 不稳定的排序：快排，堆排序，选择排序，希尔排序
 * 6. TODO 为什么比较排序的时间复杂度下限是O(nlogN)？
 */